import time
from watchdog.observers import Observer  # 导入Observer类，用于观察文件系统事件
from watchdog.events import FileSystemEventHandler  # 导入FileSystemEventHandler类，用于处理文件系统事件
from Observer.subject import Subject
import schedule
import time


# 定义一个处理文件系统事件的类，这里专门用于处理图片文件的创建事件
class  ImageHandler(FileSystemEventHandler, Subject):

    # 定义一个列表用来存储文件路径
    def __init__(self, path):
        super().__init__()
        self.path = path
        # 定义了一个观察者对象，observer
        self.observer = Observer()
        self.observer.schedule(self, path, recursive=True)
        self.observer.start()

    def  on_created(self, event):
        # 当文件或目录被创建时，会触发此方法
        # event是一个事件对象，包含了事件的相关信息

        # 判断事件是否是一个文件（而不是目录）
        if not event.is_directory:
            # 获取文件的完整路径
            file_path = event.src_path

            # 判断文件路径的扩展名是否为图片格式（不区分大小写）
            # 注意：这里假设了文件路径使用Unix风格的斜杠（/）作为分隔符
            if file_path.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff', '.webp')):
                # 如果文件是图片，则打印出图片的完整路径
                # 提取并打印出图片的文件名（不包括路径）
                # 这里使用split('\\')[-1]来获取路径的最后一个部分，即文件名
                # 注意：这仅适用于Unix风格的路径，Windows风格的路径需要使用'\\'作为分隔符
                file_name = file_path.split('\\')[-1]
                print(f"Image file name: {file_name}")
                print(f"Image file path: {file_path}")
                self.notify_observers(file_path)  # 通知所有观察者

    def run(self):
        try:
            while True:
                # print('while一次')
                schedule.run_pending()
                time.sleep(1)
        except KeyboardInterrupt:
            self.observer.stop()
        self.observer.join()
